
package persistencia;

import dominio.*;
import java.sql.SQLException;
import java.util.List;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;


public class PersistenciaTipoLocacao {
    
   // private List<TipoLocacao> tiposDeLocacao = new ArrayList<TipoLocacao>();

        private static PersistenciaTipoLocacao InstanciaTipoLocacao;
        private Connection conn;
        
   /**
 * Conexão com o banco de dados
 * 
 */
        private PersistenciaTipoLocacao () {
                Conecta c = Conecta.getConnection();
                this.conn = c.conn;
        }
	 
/**
 * 
 * Singleton. Usado para que haja apenas uma conexão com o banco sendo usada no sistema
 * 
 */
    public static PersistenciaTipoLocacao getInstance(){
	if(InstanciaTipoLocacao == null) {
                        	InstanciaTipoLocacao = new PersistenciaTipoLocacao();
	    }
	 return InstanciaTipoLocacao;
     }     


   
    public void excluir(TipoLocacao tipo){
        Statement statement;
        try {
            statement = conn.createStatement();
            statement.executeUpdate("DELETE FROM TipoLocacao WHERE nome = "+"'"+tipo.getTipo()+"'");
        } catch (SQLException ex) {
            System.out.println("Erro em excluir tipo de locação");
            //Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
   }
   /* Função para consultar um tipo de locação
* retornando todos os atributos
* @param tipo
* @return tipoLocacao
*/
 
    public TipoLocacao consultar(String tipo){
        Statement statement;
        ResultSet result;
        try {
            statement = conn.createStatement();
            result = statement.executeQuery("SELECT * FROM TipoLocacao WHERE nome = "+"'"+tipo+"'");
            if (result.next()){
                TipoLocacao tl = new TipoLocacao(result.getString("tipo"), result.getDouble("precoKm"), result.getDouble("taxaBase"));
                        return tl;
            }
            else return null;
        } catch (SQLException ex) {
            System.out.println("Erro em consultar tipo");
            //Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
           return null;
        }
    }

/* Função que busca todos os tipos de locação
* @return listaTiposLocacao
*/

    public List<TipoLocacao> getTiposDeLocacao() {
        ArrayList<TipoLocacao> tiposLocacoes = new ArrayList<TipoLocacao>();
        Statement statement;
        ResultSet result;
        try {
            statement = conn.createStatement();
            result = statement.executeQuery("SELECT * FROM TipoLocacao");
            while (result.next()){
                                TipoLocacao tl = new TipoLocacao(result.getString("tipo"), result.getDouble("precoKm"), result.getDouble("taxaBase"));
                                tiposLocacoes.add(tl);  
                        }
        } catch (SQLException ex) {
            System.out.println("Erro em get tipo de locacao");
            //Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        return tiposLocacoes;
    }

/* Função que cadastra um tipo de locação
* @param tipo
* @param precoKm
* @param taxaBase
* @return tipoLocacao
*/
    public void cadastroTipoDeLocacao () {
        String tipo;
        Double precoKm;
        Double taxaBase;
        Statement statement;
        
        System.out.println("Digite o Tipo da Locação: ");
        tipo = Console.readString();
        System.out.println("Digite o Preço por km:");
        precoKm = Console.readDouble();
        System.out.println("Digite a Taxa Base:");
        taxaBase = Console.readDouble();
        if (consultar(tipo) == null){
               try {
                            statement = conn.createStatement();
                            statement.executeUpdate("INSERT INTO TipoLocacao (tipo,precoKm,taxaBase) " +
                                            "values('"+tipo+"','"+precoKm+"','"+taxaBase+"')");
                    } catch (SQLException e) {
                        System.out.println("Erro em cadastrar tipo de locacao");
                            //imprimir erro
                    }
               System.out.println("Tipo de Locacao cadastrado com sucesso!");
               }
                else {
                    System.out.println("Tipo de Locação já cadastrado");
                }
        }

/* Função que altera um cadastro de um tipo de locação
*/

    public void alteraCadastroTipoLocacao(){

        Double precoKm, taxaBase;
         Statement statement;
         
         System.out.println("Digite o tipo de locacao:");
         String tipo = Console.readString();
            TipoLocacao tl = new TipoLocacao(tipo, 0.0, 0.0);
            if (consultar(tipo) != null){                      
                    try {
                            System.out.println("Digite o preco Km: ");
                            precoKm = Console.readDouble();
                            System.out.println("Digite a taxaBase:");
                            taxaBase = Console.readDouble();
                            statement = conn.createStatement();
                            statement.executeUpdate("UPDATE TipoLocacao SET precoKm =  '"+precoKm+"' WHERE tipo='"+tipo+"'");
                            statement.executeUpdate("UPDATE TipoLocacao SET taxaBase =  '"+taxaBase+"' WHERE tipo='"+tipo+"'");
                    } catch (SQLException e) {
                        System.out.println("Erro em alterar cadastro de tipo de locacao");
                     //imprime erro
                    }
               }
         else {
                    System.out.println("Tipo de Locacao não existe. Cadastre-o primeiro");
          }
    }

/* Função que imprime uma lista de tipos de locações
* @param listaTipoLocacao
*/
     public void imprimeLista(ArrayList<TipoLocacao> tiposLocacoes) {

       for (int i=0; i < tiposLocacoes.size(); i++) {
           System.out.println(i);
           System.out.println("Tipo: "+ tiposLocacoes.get(i).getTipo());
           System.out.println("Preco por Quilometro: "+ tiposLocacoes.get(i).getPrecoKm());
           System.out.println("Taxa Base: "+ tiposLocacoes.get(i).getTaxaBase());
           System.out.println();
       }
   }
}
